package cn.test;

import cn.test.config.EnableTest;
import cn.test.config.TestConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

/**
 * Hello world!
 * 
 */
//没有这些的话，run的时候带上扫描的class
//@Configuration
//@ComponentScan("cn.test")


//这个主要是用来自动配置，一般来说必须，因为不会影响你自己的配置。可以和starter 一起很好的使用,但没有直接联系
//即使你用了自己的jar ,spring也会努力去自动配置你的应用
//Spring Boot自动配置（auto-configuration）尝试根据添加的jar依赖自动配置你的Spring应用。例如，如果classpath下存在HSQLDB，并且你没有手动配置任何数据库连接的beans，那么Spring Boot将自动配置一个内存型（in-memory）数据库

//注：你应该只添加一个@EnableAutoConfiguration注解，通常建议将它添加到主配置类（primary @Configuration）上。

//底下的自动配置二选一
//@EnableAutoConfiguration
@SpringBootApplication

//这个可以导入其他@configuration的类
@Import(TestConfiguration.class)
//如果你还是要用自己的xml，可以添加如下
//@ImportResource
@EnableTest(name="1231231231")
public class App {

	public static void main(String[] args) {
		//我们需要将Example.class作为参数传递给run方法，以此告诉SpringApplication谁是主要的Spring组件，并传递args数组以暴露所有的命令行参数。
		//因此我们可以把配置分离给其他配置类
		SpringApplication.run(App.class, args);
		Runtime.getRuntime().addShutdownHook(new Thread(){
			@Override
			public void run() {
				System.out.println("--------------------");
			}
		});
	}
}


//自动配置是非侵入式的，任何时候你都可以用自己的配置来替换掉。例如，如果你添加自己的DataSource bean，默认的内嵌数据库支持将不被考虑

//如果需要查看当前应用启动了哪些自动配置项，你可以在运行应用时打开--debug开关，这将为核心日志开启debug日志级别，并将自动配置相关的日志输出到控制台。
// debug = true
//自动配置可以通过exclude排除
//如果该类不在classpath中，你可以使用该注解的excludeName属性，并指定全限定名来达到相同效果。最后，你可以通过spring.autoconfigure.exclude属性exclude多个自动配置项（一个自动配置项集合）。+
//注 通过注解级别或exclude属性都可以定义排除项。

